import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import  java.util.*;
import java.lang.reflect.Array;
/**
 * Clase que contiene los escenarios del juego, asi como las caracteristicas de cada uno
 * 
 * @author morales ibarra ivan israel
 * @version 
 */
public class Plataforma extends Menu
{
    private Timer t;
    private Jugador jugador;
    private Nivel[] nivel;
    private int plataforma;
    private Contador vidas;
    private Contador bonus;
    private int nNivel;
    
    private Letrero letrero;
    /**
     * Constructor de la calse plataforma
     * 
     */
    public Plataforma()
    {    
        nNivel=0;
        t = new Timer(100);
       
        jugador = new Jugador();
        vidas = new Contador(5, "VIDAS");
        bonus = new Contador(0, "BONUS");
        letrero=new Letrero();
        
    }
    
    

    /**
     * Prepara las caracteristicas iniciales del primer nivel
     */
    public void prepare()
    {
        setBackground("cieloestrellado1.jpg");
        Base molde=new Base();
        int x;
        int y;
        y=(molde.getImage()).getHeight();
        x=((molde.getImage()).getWidth());
        
        for(int j=0;j<11;j++)
        {
            for(int i=0;i<19;i++)
            {
                addObject(new Base(),  50+(x*i), 130+(y*j));
            }
            
        }
        creaObstaculos(4,30,10);        
        addObject(bonus, 51, 70);       
    }
    
    /**
     * Regresa el contador del juego
     *
     * @return     el contador del juego
     */
    public Timer dameTimer()
    {
        return t;
    }
    
    
    /**
     *Crea los obstaculos personalizados, dependiendo de cada nivel
     *
     * @param  n numero de obstaculos fijos
     * @param  mov numero de obstaculos con moviemto
     * @param  nEne numero de enemigos
     */
    public void creaObstaculos(int n,int mov,int nEne)
    {
        int numEne=nEne;
        int prob=0;
        int i=3;
        int iMov=0;
        int iEne=0;
        int iNiv=0;
        
        int pMov=0;
        int pEne=0;
        int pNiv=0;
        List auxL=getObjects(Base.class);
        Object[] ob=new Object[10];
        ob=auxL.toArray(ob);
        nivel=new Nivel[n];
           

        while(i<205)
        {
            prob=(int)(Math.random()*13+1);
            if((prob==3 || prob==6 || prob==8 || prob==12) && iMov<mov && pMov>1)
            {
                addObject(new Mmueve(),((Base)ob[i]).getX(), ((Base)ob[i]).getY());
                iMov++;
                pMov=0;
            }
            else if(prob==1 || prob==5 || prob==9 || prob==13 )             
                addObject(new Mfijo(),((Base)ob[i]).getX(), ((Base)ob[i]).getY());
            else if((prob==2 || prob==7) && iEne<numEne && pEne>4)
            {
                if(nNivel!=1)
                    addObject(new Random(),((Base)ob[i]).getX(), ((Base)ob[i]).getY());
                if(nNivel!=0)
                    addObject(new Posicion(),((Base)ob[i]).getX(), ((Base)ob[i]).getY());
                if(nNivel==3 && numEne!=7)
                {
                    numEne=7;
                }
                iEne++;
                pEne=0;
            }
            
            else if(iNiv<n && (prob==4)&& pNiv>10)
            {
                nivel[iNiv]=new Nivel( ((Base)ob[i]).getX(), ((Base)ob[i]).getY());
                addObject(nivel[iNiv],((Base)ob[i]).getX(), ((Base)ob[i]).getY()); 
                iNiv++;
                pNiv=0;
            }  
            i=i+2;
            pEne++;
            pMov++;
            pNiv++;
        }   
        t = new Timer(100);
        bonus.reiniciaCont();
        vidas = new Contador(5, "VIDAS");
        addObject(letrero, 390,320);
        addObject(vidas, 51, 29);
        addObject(t, 687, 33);  
        addObject(jugador, 0, 0);
        jugador.iniciaPos();
    }


    /**
     * Regresa el jugador del juego
     *
     * @return     jugador del juego
     */
    public Jugador dameJugador()
    {
        return jugador;
    }
    
    /**
     *Regresa el contador de las vidas del juego
     *
     * @return    las vidas del juego
     */
    public Contador dameVidas()
    {
        return vidas;
    }

    /**
     * Regresa el contador de los bonus del juego
     *
     * @return     bonus del juego
     */
    public Contador dameBonus()
    {
        return bonus;
    }


    /**
     *Cambia de diferente nivel en el juego, cuando se recolectan los 3 bonus
     *
     */
    public void cambiaNivel()
    {
        bonus.reiniciaCont();
        nNivel++;
        if(nNivel==3)
        {
            letrero.ganaste();
        }
        else
        {
            removeObjects(getObjects(Obstaculo.class));
            removeObjects(getObjects(Enemigo.class));
            removeObjects(getObjects(Timer.class));
            removeObject(vidas);
            removeObject(letrero);
            creaObstaculos(4,20,10);
            bonus.reiniciaCont();
        }

    }
    
    
    
    
    


}
